iT邦幫忙

2023 iThome 鐵人賽

DAY 24
1
DevOps

第一次參賽就學 Kubernetes系列 第 24

[Day 24] Package Manager - Helm

  • 分享至 

  • xImage
  •  

Helm

Helm 是 k8s 的套件管理工具,有點像是 mac 的 Homebrew,或是 Linux 中的 yum 負責安裝及管理套件。

Helm 用途

當今天想要將自己在 k8s 中建立的程式分享給他人時,此時會有很多設定檔案,如 Deployment、Service、ConfigSet 或 Secret 等,這些東西都必須複製一份出來到他人的 k8s 環境上,除此之外還需要針對每個設定檔案去一一修改其中的個別參數,以符合自己的需求,處理起來勢必很耗時間。

Helm 的功能就是針對這些 yaml 設定檔收集起來,並打包成一個 package,便於分享給他人使用,並提供模板引擎讓使用者可以輕易替換 yaml 裡面的設定參數。

其中,Helm Charts 是描述一個 k8s 中相關資源檔案(yaml)的集合,也就是剛才提到的 package。這些 Helm Charts 可以放在私人 helm repository 或放在網路上與他人分享,例如「ArtifactHub」是一個類似 DockerHub 讓開發者上傳自己建立 helm charts 的地方,也可以在上面尋找 k8s packages。

Release 指的是在 k8s 叢集中的 chart 實例。一個 chart 可以在同個叢集中安裝不只一次,每安裝一次 k8s 都會建立一個新的 release。

我們可以透過 helm 到 helm repository 尋找他人的 helm charts,並將其下載下來,讓 helm 將下載的 charts 安裝到自己叢集上使用。

安裝 helm

在安裝上官方提供很多種方式,我這邊是 mac 使用 Homebrew 安裝。

brew install helm

查看版本。

helm version

使用 helm

在 ArtifactHub 上尋找有關 bitnami 的 charts,如沒有過濾會列出所有可用的 charts。

helm search hub bitnami

透過 helm repo add 將 ArtifactHub 上的 charts 加入至自己本地的 repository,方便管理與查找。

helm repo add bitnami https://charts.bitnami.com/bitnami

"bitnami" has been added to your repositories

在自己的 repository 查看。

helm search repo bitnami

安裝 bitnami charts,可以看到安裝後 chart 實例的名稱:mysql-1696867238

helm repo update
helm install bitnami/mysql --generate-name

Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈
NAME: mysql-1696867238
# ...略

查看 chart 相關資訊。

helm show chart bitnami/mysql

查看當前叢集中有哪些 releases。

helm list

NAME            	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART       	APP VERSION
mysql-1696867238	default  	1       	2023-10-10 00:00:40.695898 +0800 CST	deployed	mysql-9.12.4	8.0.34

執行以下指令,解除安裝這個 release。

helm uninstall mysql-1696867238

release "mysql-1696867238" uninstalled
helm list

NAME	NAMESPACE	REVISION	UPDATED	STATUS	CHART	APP VERSION

若是要從本地 repository 刪除 bitnami 這個 chart。

helm repo remove bitnami

查看一下。

helm repo list
Error: no repositories to show

使用 template 來自定義參數

尋找 chart: wordpress。

helm search hub wordpress

將其加入到自己的 repo。

helm repo add bitnami https://charts.bitnami.com/bitnami

"bitnami" has been added to your repositories

安裝 wordpress 並將其 release 命名為 happy-panda,--generate-name 加了會自動幫命名。

helm install happy-panda bitnami/wordpress

接著查看這個 chart 提供可自定義參數的地方。

helm show values bitnami/wordpress # 查看可以自定義的參數

# ... 略
mariadb:
  ## @param mariadb.enabled Deploy a MariaDB server to satisfy the applications database requirements
  ## To use an external database set this to false and configure the `externalDatabase.*` parameters
  ##
  enabled: true
  ## @param mariadb.architecture MariaDB architecture. Allowed values: `standalone` or `replication`
  ##
  architecture: standalone
  ## MariaDB Authentication parameters
  ## @param mariadb.auth.rootPassword MariaDB root password
  ## @param mariadb.auth.database MariaDB custom database
  ## @param mariadb.auth.username MariaDB custom user name
  ## @param mariadb.auth.password MariaDB custom user password

# ... 略

這邊是我想修改的參數內容:

  • mariadb.auth.database 設定為 mydb
  • mariadb.auth.username 設定為 vanz

將其寫成一個 values.yaml 檔案。

mariadb:
  auth:
    database: mydb
    username: vanz

這邊我再重新 release 一個版本出來,並以 -f--values 指定要覆蓋的參數內容。

helm install -f values.yaml bitnami/wordpress --generate-name

查看當前 release。

helm list

NAME                	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART            	APP VERSION
happy-panda         	default  	1       	2023-10-10 00:25:58.851103 +0800 CST	deployed	wordpress-17.1.16	6.3.1
wordpress-1696870314	default  	1       	2023-10-10 00:51:56.63141 +0800 CST 	deployed	wordpress-17.1.16	6.3.1

查看在這個 release 中我設定了哪些自定義的參數內容。

helm get values wordpress-1696870314

USER-SUPPLIED VALUES:
mariadb:
  auth:
    database: mydb
    username: vanz

接著前往 pods 查看這些設定值有沒有真的修改,選定 wordpress-1696870314-mariadb-0 這個 pod。

kubectl get po

NAME                                     READY   STATUS             RESTARTS        AGE
happy-panda-mariadb-0                    0/1     CrashLoopBackOff   8 (3m36s ago)   28m
happy-panda-wordpress-7676768bf4-wvd9g   0/1     CrashLoopBackOff   8 (3m28s ago)   28m
wordpress-1696870314-6fd8bd66c7-hkqw9    1/1     Running            0               2m40s
wordpress-1696870314-mariadb-0           1/1     Running            0               2m40s

kubectl describe 可以看到替換掉原本 yaml 預設值,變為 vanzmydb

kubectl describe pods wordpress-1696870314-mariadb-0

# ... 略
      MARIADB_USER:           vanz
      MARIADB_PASSWORD:       <set to the key 'mariadb-password' in secret 'wordpress-1696870314-mariadb'>  Optional: false
      MARIADB_DATABASE:       mydb
# ... 略

以下是原本預設的。

# ... 略
      MARIADB_USER:           bn_wordpress
      MARIADB_PASSWORD:       <set to the key 'mariadb-password' in secret 'wordpress-1696870695-mariadb'>  Optional: false
      MARIADB_DATABASE:       bitnami_wordpress
# ... 略

參考來源

1.Helm Docs - Quickstart Guide
2.Helm Docs - 使用Helm


上一篇
[Day 23] DaemonSet 與 StatefulSet
下一篇
[Day 25] Authentication
系列文
第一次參賽就學 Kubernetes30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言